package com.pilipala.controller;

import com.pilipala.dto.CommentAddDTO;
import com.pilipala.dto.CommentChildDTO;
import com.pilipala.dto.CommentDTO;
import com.pilipala.result.PageResult;
import com.pilipala.result.Result;
import com.pilipala.service.CommentService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/comment")
@Slf4j
@Tag(name = "评论相关接口")
public class CommentController {

    @Autowired
    private CommentService commentService;
    /**
     * 批量列出评论
     * @param commentDTO 被评论类的Id、页码、页大小获取评论
     * @return 分页后的  --基础的评论字段和评论人的头像
     */
    @GetMapping("/list")
    @Operation(
            summary = "批量列出评论",
            description = "根据被评论类的Id、页码、页大小获取评论")
    public Result<PageResult> list(CommentDTO commentDTO){
        log.info("获取评论Id");
        PageResult pageResult = commentService.getByMetaId(commentDTO);
        return Result.success(pageResult);
    }

    /**
     * 添加评论
     * @param commentAddDTO videoId、blogId,contentId
     * @return 无
     */
    @PostMapping("/add")
    @Operation(summary = "添加评论相关接口")
    public Result<?> addComment(@RequestBody CommentAddDTO commentAddDTO){
        log.info("添加评论{}",commentAddDTO);
        commentService.add(commentAddDTO);
        return Result.success();
    }

    /**
     * 获取子评论
     * @param commentChildDTO 页码、页数、媒体id、父评论id
     * @return 返回分页后的结果
     */
    @GetMapping("/listChild")
    @Operation(summary = "获取子评论")
    public Result<PageResult> listChild(CommentChildDTO commentChildDTO){
        log.info("获取子评论,传输数据：{}",commentChildDTO);
        PageResult pageResult = commentService.listChild(commentChildDTO);
        log.info("获取到的评论信息:{}",pageResult);
        return Result.success(pageResult);
    }

    /**
     * 删除父评论
     * @return 无
     */
    @DeleteMapping("/deleteSub/{id}")
    @Operation(summary = "删除父评论")
    public Result<?> deleteSub(@PathVariable Long id){
        log.info("删除父评论,Id：{}",id);
        commentService.deleteItem(id);
        return Result.success();
    }

    /**
     * 删除子评论
     * @param id 删除子评论
     * @return 无
     */
    @DeleteMapping("/deleteChild/{id}")
    @Operation(summary = "删除子评论")
    public Result<?> deleteChild(@PathVariable Long id){
        log.info("删除子评论,id:{}",id);
        commentService.deleteChild(id);
        return Result.success();
    }
}
